Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Lineare Suche</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Lineare_Suche"> <link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Lineare_Suche rootpage-Lineare_Suche skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Lineare Suche</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p><b>Lineare Suche</b> ist ein <a href="Algorithmus" title="Algorithmus">Algorithmus</a>, der auch unter dem Namen <b>sequentielle Suche</b> bekannt ist. Er ist der einfachste <a href="Suchalgorithmus" class="mw-redirect" title="Suchalgorithmus">Suchalgorithmus</a> überhaupt.
</p><p>Die Aufgabe besteht darin, ein Element in einer Liste oder einem <a href="Feld_(Datentyp)" class="mw-redirect" title="Feld (Datentyp)">Array</a> mit <i>n</i> Elementen zu finden.
Man geht dazu die Liste Element für Element durch, bis man es gefunden hat.
Der Suchaufwand wächst linear mit der Anzahl der Elemente in der Liste.
</p><p>Die effizientere <a href="Bin%C3%A4re_Suche" title="Binäre Suche">Binäre Suche</a> kann nur bei geordneten Listen benutzt werden.
</p><p>Für ungeordnete Listen existiert mit <i>Lazy Select</i> noch ein <a href="Randomisierter_Algorithmus" title="Randomisierter Algorithmus">randomisierter Algorithmus</a>, der mit relativ hoher Wahrscheinlichkeit das x-te Element einer Liste bezüglich einer Ordnung schneller als in linearer Zeit finden kann.
</p>

<div class="mw-heading mw-heading2"><h2 id="Komplexität"><span id="Komplexit.C3.A4t"></span>Komplexität</h2></div>
<p>Die lineare Suche befindet sich in der <a href="Komplexit%C3%A4tsklasse" title="Komplexitätsklasse">Komplexitätsklasse</a> <i>O(n)</i>, da sie im schlechtesten Fall (wenn der gesuchte Wert nicht gefunden werden kann) <i>n</i> Vergleiche benötigt.
</p><p>Wenn die Daten zufallsverteilt sind, dann werden im <a href="Mittelwert" title="Mittelwert">Schnitt</a> <i>(n+1)/2</i> Vergleichsoperationen benötigt.
</p><p>Im besten Fall ist gleich das erste Element der Liste dasjenige, das man sucht.
</p><p>Wenn die Anzahl der Elemente in einer Liste klein ist, dann ist es oft auch das effizienteste Verfahren.
</p>
<div class="mw-heading mw-heading2"><h2 id="Implementierungen_(Beispiele)"><span id="Implementierungen_.28Beispiele.29"></span>Implementierungen (Beispiele)</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Implementierung_in_Pseudocode">Implementierung in <a href="Pseudocode" title="Pseudocode">Pseudocode</a></h3></div>
<pre>BEGINN LinearSearch
</pre>
<pre> EINGABE: (S)uchschlüssel, (A)rray
</pre>
<pre> VARIABLE: N = Anzahl Elemente im Array 'A'
VARIABLE: SucheErfolgreich = falsch
VARIABLE: i = 0
</pre>
<pre> FÜR i BIS N ODER SucheErfolgreich
WENN A[i] = S
DANN SucheErfolgreich = wahr
</pre>
<pre> WENN SucheErfolgreich = wahr
DANN AUSGABE: i
SONST AUSGABE: Suche nicht erfolgreich
</pre>
<pre>ENDE
</pre>
<div class="mw-heading mw-heading3"><h3 id="Beispielimplementierung_in_Ruby">Beispielimplementierung in <a href="Ruby_(Programmiersprache)" title="Ruby (Programmiersprache)">Ruby</a></h3></div>
<div class="mw-highlight mw-highlight-lang-ruby mw-content-ltr" dir="ltr"><pre><span></span><span class="c1"># Falls der Wert nicht gefunden wird, gibt die Methode nil zurück.</span>
<span class="k">def</span><span class="w"> </span><span class="nf">lineare_suche</span><span class="p">(</span><span class="n">liste</span><span class="p">,</span><span class="w"> </span><span class="n">gesucht</span><span class="p">)</span>
<span class="w"> </span><span class="n">liste</span><span class="o">.</span><span class="n">each_with_index</span><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="o">|</span><span class="n">wert</span><span class="p">,</span><span class="w"> </span><span class="n">index</span><span class="o">|</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">index</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">wert</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">gesucht</span>
<span class="w"> </span><span class="k">end</span>

<span class="w"> </span><span class="kp">nil</span>
<span class="k">end</span>

<span class="c1"># bzw.</span>
<span class="n">liste</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">gesucht</span><span class="p">)</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Beispielimplementierung_in_Delphi_bzw._Free_Pascal">Beispielimplementierung in <a href="Embarcadero_Delphi" title="Embarcadero Delphi">Delphi</a> bzw. <a href="Free_Pascal" title="Free Pascal">Free Pascal</a></h3></div>
<div class="mw-highlight mw-highlight-lang-delphi mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// Durchsucht ein Array of Integer nach einem gesuchten Integer-Wert.</span>
<span class="c1">// Wird der gesuchte Wert gefunden, gibt die Funktion den Index des Wertes zurück.</span>
<span class="c1">// Falls der Wert nicht gefunden wird, gibt die Funktion -1 zurück.</span>
<span class="k">function</span><span class="w"> </span><span class="nf">LineareSuche</span><span class="p">(</span><span class="n">gesucht</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="kt">integer</span><span class="o">;</span><span class="w"> </span><span class="n">ADaten</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="k">array</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="kt">integer</span><span class="p">)</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="kt">integer</span><span class="o">;</span>
<span class="k">var</span>
<span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="kt">integer</span><span class="o">;</span>
<span class="k">begin</span>
<span class="w"> </span><span class="bp">Result</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="o">;</span>

<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nb">Low</span><span class="p">(</span><span class="n">ADaten</span><span class="p">)</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="nb">High</span><span class="p">(</span><span class="n">ADaten</span><span class="p">)</span><span class="w"> </span><span class="k">do</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">gesucht</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ADaten</span><span class="p">[</span><span class="n">c</span><span class="p">]</span><span class="w"> </span><span class="k">then</span>
<span class="w"> </span><span class="bp">Result</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="n">c</span><span class="o">;</span>
<span class="k">end</span><span class="o">;</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Beispielimplementierung_in_Objective_CAML">Beispielimplementierung in <a href="Objective_CAML" class="mw-redirect" title="Objective CAML">Objective CAML</a></h3></div>
<div class="mw-highlight mw-highlight-lang-ocaml mw-content-ltr" dir="ltr"><pre><span></span> <span class="k">let</span> <span class="k">rec</span> <span class="n">linsuche</span> <span class="o">=</span> <span class="k">function</span>
<span class="o">(</span><span class="bp">[]</span><span class="o">,</span><span class="n">a</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="bp">false</span>
<span class="o">|</span> <span class="o">(</span><span class="n">x</span><span class="o">::</span><span class="n">t</span><span class="o">,</span><span class="n">a</span><span class="o">)</span> <span class="o">-&gt;</span> <span class="k">if</span> <span class="n">x</span> <span class="o">=</span> <span class="n">a</span> <span class="k">then</span> <span class="bp">true</span> <span class="k">else</span> <span class="n">linsuche</span><span class="o">(</span><span class="n">t</span><span class="o">,</span><span class="n">a</span><span class="o">);;</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Beispielimplementierung_in_Java">Beispielimplementierung in <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a></h3></div>
<p>Das Beispiel gibt den Wert <code>-1</code> zurück, wenn das gesuchte Element nicht im Array <code>daten</code> vorhanden ist. Ansonsten gibt es die Position des Elementes zurück.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">lineareSuche</span><span class="p">(</span><span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">gesucht</span><span class="p">,</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="o">[]</span><span class="w"> </span><span class="n">daten</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">daten</span><span class="p">.</span><span class="na">length</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">daten</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">gesucht</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">i</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="o">-</span><span class="mi">1</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Beispielimplementierung_in_Python">Beispielimplementierung in <a href="Python_(Programmiersprache)" title="Python (Programmiersprache)">Python</a></h3></div>
<p><b>Findet alle Suchschlüssel in der Liste.</b>
</p>
<div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">lineare_suche</span><span class="p">(</span><span class="n">liste</span><span class="p">,</span> <span class="n">gesucht</span><span class="p">):</span>
<span class="n">idxs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">element</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">liste</span><span class="p">):</span>
<span class="k">if</span> <span class="n">element</span> <span class="o">==</span> <span class="n">gesucht</span><span class="p">:</span>
<span class="n">idxs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
<span class="k">return</span> <span class="n">idxs</span>
<span class="c1"># bzw.</span>
<span class="n">lineare_suche</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span><span class="n">g</span> <span class="p">:</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span><span class="n">e</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">l</span><span class="p">)</span> <span class="k">if</span> <span class="n">g</span> <span class="o">==</span> <span class="n">e</span><span class="p">]</span>
</pre></div>
<p><b>Findet erstes Vorkommen des Suchschlüssels in einer Liste.</b>
</p>
<div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span></span><span class="k">def</span><span class="w"> </span><span class="nf">lineare_suche</span><span class="p">(</span><span class="n">liste</span><span class="p">,</span> <span class="n">gesucht</span><span class="p">):</span>
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">element</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">liste</span><span class="p">):</span>
<span class="k">if</span> <span class="n">element</span> <span class="o">==</span> <span class="n">gesucht</span><span class="p">:</span>
<span class="k">return</span> <span class="n">index</span>
<span class="c1"># bzw. gibt es schon</span>
<span class="n">lineare_suche</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">,</span><span class="n">g</span> <span class="p">:</span> <span class="n">l</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">g</span><span class="p">)</span> <span class="k">if</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">l</span> <span class="k">else</span> <span class="kc">None</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Beispielimplementierung_in_C">Beispielimplementierung in <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a></h3></div>
<p><b>Findet ersten Suchschlüssel (Ganzzahl) in der Liste.</b>
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdio.h&gt;</span>
<span class="cm">/*</span>
<span class="cm">int*daten = Zeiger auf zu durchsuchende Daten</span>
<span class="cm">int datenlaenge = Größe des zu durchsuchenden "Arrays"</span>
<span class="cm">int suche = Gesuchte Ganzzahl</span>
<span class="cm">*/</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">suche_sequenziell</span><span class="p">(</span><span class="kt">int</span><span class="o">*</span><span class="n">daten</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">datenlaenge</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">suche</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="n">i</span><span class="o">&lt;</span><span class="n">datenlaenge</span><span class="p">;</span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">daten</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">==</span><span class="n">suche</span><span class="p">)</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">i</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">-1</span><span class="p">;</span>
<span class="p">}</span>

<span class="cm">/* Beispielaufruf */</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">datenArray</span><span class="p">[</span><span class="mi">10</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="mi">81</span><span class="p">,</span><span class="w"> </span><span class="mi">1203</span><span class="p">,</span><span class="w"> </span><span class="mi">180</span><span class="p">,</span><span class="w"> </span><span class="mi">42</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">566</span><span class="p">,</span><span class="w"> </span><span class="mi">102</span><span class="p">,</span><span class="w"> </span><span class="mi">751</span><span class="p">,</span><span class="w"> </span><span class="mi">54</span><span class="p">,</span><span class="w"> </span><span class="mi">648</span><span class="w"> </span><span class="p">};</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">pos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">suche_sequenziell</span><span class="p">(</span><span class="n">datenArray</span><span class="p">,</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span><span class="w"> </span><span class="mi">42</span><span class="p">);</span>
<span class="cm">/* -1 für nicht gefunden, ansonsten (erste) Position im Array, mit 0 beginnend */</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pos</span><span class="o">&lt;</span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">"Nicht gefunden"</span><span class="p">);</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">"Gefunden an Position %d"</span><span class="p">,</span><span class="n">pos</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Liste_von_Algorithmen" title="Liste von Algorithmen">Liste von Algorithmen</a></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2021-12-20" href="https://de.wikipedia.org/wiki/?title=Lineare_Suche&amp;oldid=218374077">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>